package com.an.pay.service.wx;

import com.an.pay.entity.WxPayParams;
import com.an.pay.entity.WxRefundParams;

import java.io.IOException;
import java.util.Map;

public interface NativePayService {

    /**
     *  支付宝native支付接口
     * @param wxPayParams : 微信支付下单需要的参数
     * @return  返回Map 里面包含 codeUrl（二维码） 和 orderNo（订单id）
     */
    Map<String,String> pay(WxPayParams wxPayParams) throws Exception;

    /**
     *  native 的订单状态查询
     * @param orderNo  订单号
     * @param <T>  订单号类型
     * @return 返回查询订单的数据 Map
     */
    <T> Map<String, Object> findOrderNoStatus(T orderNo) throws IOException;

    /**
     *  native 的关闭订单
     * @param orderNo  订单号
     * @param <T> 订单数据类型
     * @return 是否关闭
     */
    <T> void closeOrder(T orderNo) throws IOException;

    /**
     *  native退款
     * @param  wxRefundParams : 里面封装了退款订单需要的信息
     *
     */
    <T> void refund(WxRefundParams wxRefundParams) throws IOException;

    /**
     *  查询退款的状态
     * @param refundNo  退款订单号
     * @param <T> 类型
     * @return  退款信息
     */
    <T> Map<String, String> findRefund(T refundNo) throws IOException;

    /**
     * 申请账单的下载地址
     * @param billDate 申请下载账单的时间 ：从什么时候开始的时间
     * @param type ： 有两种类型的账单
     *              -   tradebill ： 交易账单
     *              -   fundflowbill ： 资金账单
     * @return
     */
    String requestBillAddress(String billDate, String type) throws IOException;

    /**
     * 下载账单
     * @param downloadAddress 账单下载地址
     * @return 账单数据
     */
    String downloadBill(String downloadAddress) throws IOException;
}
